#pragma once

#include"mgepch.h"



namespace myMiniEngine {
	class Shader {
	public:
		
		virtual ~Shader()= default; 

		virtual void Bind() const=0;
		virtual void UnBind() const=0;

		virtual const std::string& GetName() const = 0;

		static Ref<Shader> Create(const std::string& filepath); 
		static Ref<Shader> Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);


	};

	class ShaderLibrary {
	public:
		void Add(const std::string _name,const Ref<Shader>& _shader);
		void Add(const Ref<Shader>& _shader);
		
		Ref<Shader> Load(const std::string& filepath);
		Ref<Shader> Load(const std::string& name, const std::string& filepath);

		Ref<Shader> Get(const std::string& name);

		bool Exist(const std::string& _name) const;
	private:
		std::unordered_map<std::string, Ref<Shader>> shaders;
	};


}